Don't use GTK_WIDGET_*SET_FLAGS (wid, GTK_TOPLEVEL)
authorJavier Jardón <jjardon@gnome.org>
Mon, 12 Apr 2010 15:48:09 +0000 (17:48 +0200)
committerJavier Jardón <jjardon@gnome.org>
Mon, 26 Apr 2010 19:07:20 +0000 (21:07 +0200)
Introduce internal _gtk_widget_set_is_toplvel() for this

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=614510

gtk/gtkinvisible.c
gtk/gtkwidget.c
gtk/gtkwidget.h
gtk/gtkwin32embedwidget.c
gtk/gtkwindow.c

index c24487cb539c3da088de1dad3e228dcff90cb420..8c0b3beb5e019c66d62f9808275b7298cd15dad3 100644 (file)
@@ -95,7 +95,7 @@ gtk_invisible_init (GtkInvisible *invisible)
   GdkColormap *colormap;
   
   gtk_widget_set_has_window (GTK_WIDGET (invisible), TRUE);
-  GTK_WIDGET_SET_FLAGS (invisible, GTK_TOPLEVEL);
+  _gtk_widget_set_is_toplevel (GTK_WIDGET (invisible), TRUE);
 
   g_object_ref_sink (invisible);
 
index 61c6b1c9459d75c86e99ff87fc9606cff21d6375..772619f8c5a7984499fcd9759c34b6de2ce0852e 100644 (file)
@@ -5953,6 +5953,16 @@ gtk_widget_is_toplevel (GtkWidget *widget)
   return (GTK_OBJECT_FLAGS (widget) & GTK_TOPLEVEL) != 0;
 }
 
+void
+_gtk_widget_set_is_toplevel (GtkWidget *widget,
+                             gboolean   is_toplevel)
+{
+  if (is_toplevel)
+    GTK_OBJECT_FLAGS (widget) |= GTK_TOPLEVEL;
+  else
+    GTK_OBJECT_FLAGS (widget) &= ~(GTK_TOPLEVEL);
+}
+
 /**
  * gtk_widget_is_drawable:
  * @widget: a #GtkWidget
index dd8eb316d88bb467a226336c94ff4e647e3c8a27..17bb2b6f21ae47c4b9513b91030af599058f0f8e 100644 (file)
@@ -1298,6 +1298,9 @@ void            gtk_requisition_free     (GtkRequisition       *requisition);
 
 void              _gtk_widget_set_has_grab                (GtkWidget    *widget,
                                                            gboolean      has_grab);
+void              _gtk_widget_set_is_toplevel             (GtkWidget    *widget,
+                                                           gboolean      is_toplevel);
+
 void              _gtk_widget_grab_notify                 (GtkWidget    *widget,
                                                           gboolean     was_grabbed);
 
index 2e1a6b1b64f0a904a49227d7789e0d393a4b0f63..9c276ea3b49f3a16dbcdc935ddd52d10084dfb44 100644 (file)
@@ -85,7 +85,7 @@ gtk_win32_embed_widget_init (GtkWin32EmbedWidget *embed_widget)
 
   window->type = GTK_WINDOW_TOPLEVEL;
 
-  GTK_WIDGET_SET_FLAGS (embed_widget, GTK_TOPLEVEL);
+  _gtk_widget_set_is_toplevel (GTK_WIDGET (embed_widget), TRUE);
   gtk_container_set_resize_mode (GTK_CONTAINER (embed_widget), GTK_RESIZE_QUEUE);
 }
 
index 51ff50056d69db750529beb3387f59a4e98bfd0e..108a7c14e202450859505ba5e453fa9ab7e2fd50 100644 (file)
@@ -901,7 +901,7 @@ gtk_window_init (GtkWindow *window)
   GtkWindowPrivate *priv = GTK_WINDOW_GET_PRIVATE (window);
   
   gtk_widget_set_has_window (GTK_WIDGET (window), TRUE);
-  GTK_WIDGET_SET_FLAGS (window, GTK_TOPLEVEL);
+  _gtk_widget_set_is_toplevel (GTK_WIDGET (window), TRUE);
 
   GTK_PRIVATE_SET_FLAG (window, GTK_ANCHORED);
 
@@ -8379,22 +8379,26 @@ void
 _gtk_window_set_is_toplevel (GtkWindow *window,
                             gboolean   is_toplevel)
 {
-  if (gtk_widget_is_toplevel (GTK_WIDGET (window)))
+  GtkWidget *widget;
+
+  widget = GTK_WIDGET (window);
+
+  if (gtk_widget_is_toplevel (widget))
     g_assert (g_slist_find (toplevel_list, window) != NULL);
   else
     g_assert (g_slist_find (toplevel_list, window) == NULL);
 
-  if (is_toplevel == gtk_widget_is_toplevel (GTK_WIDGET (window)))
+  if (is_toplevel == gtk_widget_is_toplevel (widget))
     return;
 
   if (is_toplevel)
     {
-      GTK_WIDGET_SET_FLAGS (window, GTK_TOPLEVEL);
+      _gtk_widget_set_is_toplevel (widget, TRUE);
       toplevel_list = g_slist_prepend (toplevel_list, window);
     }
   else
     {
-      GTK_WIDGET_UNSET_FLAGS (window, GTK_TOPLEVEL);
+      _gtk_widget_set_is_toplevel (widget, FALSE);
       toplevel_list = g_slist_remove (toplevel_list, window);
     }
 }